let wkf = "该功能暂未开放，敬请期待~";
let base = "http://localhost:9091/api/mhxysy";
base = "";

/**
 * 封装的ajax get请求
 * @param url 请求url
 * @param params 请求参数
 * @param success 成功回调函数
 * @param error 失败回调函数
 * @param async 是否异步
 */
function ajaxGet(url, params, success, error, async = true) {
	$.ajax({
		type: "GET",
		url: base + url,
		data: params,
		cache: false,
		async: async,
		dataType: "json",
		processData: true,
		success: success,
		error: error
	});
}

/**
 * 封装的ajax post请求
 * @param url 请求url
 * @param params 请求参数
 * @param success 成功回调函数
 * @param error 失败回调函数
 * @param async 是否异步
 */
function ajaxPost(url, params, success, error, async = true) {
	$.ajax({
		type: "POST",
		url: base + url,
		data: params,
		async: async,
		cache: false,
		dataType: "json",
		processData: true,
		success: success,
		error: error
	});
}

/**
 * 提交FormData的Ajax POST请求
 * @param url 请求路径
 * @param data 请求参数
 * @param success 成功回调
 * @param error 失败回调
 */
function postForm(url, data, success, error) {
	$.ajax({
		url: base + url,
		data: data,
		cache: false,
		async: true,
		type: "POST",
		dataType: "json",
		processData: false,
		contentType: false,
		success: success,
		error: error
	});
}

/**
 * 文件上传
 * @param _obj 文件上传选择框对象
 * @param id 数据的ID
 * @param url 文件上传的请求路径
 */
function fileUpload(_obj, id, url) {
	let file = $(_obj).context.ownerDocument.activeElement.files[0];
	let form = new FormData();

	form.append("id", id);
	form.append("file", file);

	postForm(url, form, function (resp) {
		let image = resp.data;

		$("#image").val(image);
		$("#img").attr("src", image);
	}, error);
}

/**
 * 错误回调函数
 * @param resp
 */
let error = (resp) => {
	let response = resp.responseJSON;

	// 请求有响应
	if (resp && response) {
		// 得到响应状态码
		let status = resp.status;

		if (status) {
			let message;

			if (status === 404) { // 404 not found
				if (response.path) {
					message = "路径" + response.path + "不存在。";
				} else {
					message = response.message;
				}
			} else {
				message = response.message;
			}

			alertMsg(message, "error");
		} else {
			console.log("请求没有响应状态码~");
		}
	} else {
		console.log("请求无响应~");
	}
}

/**
 * 不包含错误回调函数的Ajax get请求
 */
function get(url, params, success) {
	$.get(url, params, success, "json");

	// $.get("/chongwu/selectAll", function (resp) { // 案例代码
	// 	let data = resp.data;
	//
	// 	console.table(data);
	// }, "json");
}

/**
 * 包含错误回调函数的Ajax post请求
 */
function post(url, params, success) {
	$.post(url, params, success, "json");

	// $.post("/chongwu/tongyu", {}, function (resp) { // 案例代码
	// 	if (resp.code === 200) {
	// 		console.table(resp.message);
	// 	}
	// }, "json");
}

/**
 * 右下角弹出消息提示
 * @param message 提示消息
 * @param type 消息类型：slide/show/fade
 */
function showMsg(message, type = "slide") {
	$.messager.show({
		title: "系统消息",
		msg: message,
		timeout: 3000,
		showType: type
	});
}

/**
 * 弹出提示
 * @param message 提示消息
 * @param type 提示类型：warning/error/info/question
 */
function alertMsg(message, type = "info") {
	$.messager.alert("系统提示", message, type);
}

/**
 * 重置文件上传组件的值
 * @param selector 组件的选择器
 */
function resetValue(selector) {
	$(selector).filebox("initValue", null);
}

/**
 * 功能未开放
 */
function unopen() {
	alertMsg(wkf);
}

/**
 * 未选择记录
 * @param message
 * @param type
 */
function unselected(message = "请选择一条记录！", type = "warning") {
	alertMsg(message, type);
}

/**
 * 验证表单
 * @param selector 选择器
 * @param callback 表单验证通过后执行的操作
 */
function checkForm(selector, callback) {
	let bool = $(selector).form("validate");

	if (bool) {
		if (callback) {
			callback();
		}
	} else {
		alertMsg("请填写正确的表单项", "warning");
	}
}

/**
 * 需要确认的操作
 * @param message 提升信息
 * @param callback 操作
 * @param cancel
 */
function confirmAction(message  = "是否确认删除？", callback, cancel) {
	$.messager.confirm("提示", message, function(bool) {
		if (bool) {
			callback();
		} else {
			if (cancel) {
				cancel();

				console.log("用户取消了操作...");
			}
		}
	});
}

/**
 * 将数组转为json格式的数据
 * @param array 任意数组
 * @returns {{code: number, data: *[], success: boolean, message: string}}
 */
function getJsonData(array) {
	let data = [];

	for (let i = 0; i < array.length; i ++) {
		let text = array[i];

		if (text != null) {
			data.push({
				value: i + "",
				text: text
			});
		}
	}

	return {
		code: 200,
		data: data,
		success: true,
		message: "请求成功"
	};
}

/**
 * 将数组转为json格式的数据
 * @param data 任意类型的数据
 * @returns {{code: number, data: *[], success: boolean, message: string}}
 */
function toJsonFormat(data) {
	return {
		code: 200,
		data: data,
		success: true,
		message: "请求成功"
	};
}

/**
 * 渲染easyui combobox下拉框
 * @param selector 选择器
 * @param param 数组/字符串
 * @param options 选项
 */
function fetchSelect(selector, param, options = {}) {
	if ($.isArray(param)) { // 参数是数组
		let opts = $.extend({}, options, {
			data: getJsonData(param),
			valueField: "value",
			textField: "text",
			width: options.width ? options.width : 150,
			required: true,
			panelHeight: "auto"
		});

		$(selector).combobox(opts);
	} else if (typeof param == "string") { // 参数是字符串
		let opts = $.extend({}, options, {
			url: param,
			valueField: "id",
			textField: "name",
			width: options.width ? options.width : 150,
			required: true,
			panelHeight: "auto"
		});

		$(selector).combobox(opts);
	} else {
		throw new Error("非法的参数param");
	}
}

/**
 * 渲染角色ID下拉框combobox组件
 * @param width 组件宽度
 */
function fetchRoleId(width = 150) {
	$("#roleId").combobox({
		url: "/role_account/selectAll",
		valueField: "id",
		textField: "name",
		width: width,
		required: true,
		panelHeight: "auto",
		formatter: function(row) {
			ajaxGet("/role_category/selectById", {
				id: row.categoryId
			}, function(resp) {
				let data = resp.data;

				$("#role_category_" + row.id).attr({
					title: data.name,
					src: data.image,
					alt: data.name
				});
			}, error);

			return "<img height='18' id='role_category_" + row.id + "' />&nbsp;" + row.name;
		}
	});
}

/**
 * 渲染门派ID下拉框combobox组件
 * @param width 组件宽度
 */
function fetchSchoolId(width = 150) {
	$("#schoolId").combobox({
		url: "/school/selectAll",
		valueField: "id",
		textField: "name",
		width: width,
		required: true,
		formatter: function(row) {
			return "<img height='20' src='" + row.image + "' />&nbsp;" + row.name;
		}
	});
}